package com.framework.dbs.dao;

import java.io.Serializable;
import java.sql.Connection;
import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.ibatis.SqlMapClientTemplate;

import com.framework.bas.exception.BasException;
import com.framework.dbs.vo.BaseObject;

@SuppressWarnings("unchecked")
public interface IDataBase {
	
	/**
	 * 创建数据连接
	 * @param 
	 * @return Connection sql连接
	 */
	public Connection getConnection() throws BasException;
	
	/**
	 * 获取HibernateTemplate模板
	 * @param 
	 * @return HibernateTemplate
	 */
    public HibernateTemplate getHibernateTemplate() throws BasException;
    
    /**
	 * 获取JdbcTemplate模板
	 * @param 
	 * @return JdbcTemplate
	 */
    public JdbcTemplate getJdbcTemplate() throws BasException;

    /**
	 * 获取SqlMapClientTemplate模板
	 * @param 
	 * @return SqlMapClientTemplate
	 */
    public SqlMapClientTemplate getSqlMapClientTemplate() throws BasException;
	
	/**
	 * Hibernate保存对象
	 * @param serialObject 序列化对象
	 * @return int 保存数量个数
	 */
	public int save(BaseObject serialObject) throws BasException;

	/**
	 * Hibernate-删除对象
	 * @param BaseObject 序列化对象
	 * @return int 删除数量个数
	 */
	public int delete(BaseObject serialObject) throws BasException;
	
	/**
	 * Hibernate-更新对象
	 * @param BaseObject 序列化对象
	 * @return int 更新数量个数
	 */
	public int update(BaseObject serialObject) throws BasException;

	/**
	 * Hibernate-主键删除对象
	 * @param Class 对象VO类
	 * @param Serializable 序列化主键
	 * @return int 删除数量个数
	 */
	public int deleteByID(Class class1, Serializable serializable) throws BasException;
	
	/**
	 * Hibernate-LOAD主键查询对象
	 * @param Class 对象VO类
	 * @param Serializable 序列化主键
	 * @return SerialObject 对象VO
	 */
    public <T extends BaseObject> T findByID_Hibernate_Load(Class class1, Serializable serializable) throws BasException;

    /**
	 * Hibernate-GET查询对象
	 * @param Class 对象VO类
	 * @param Serializable 序列化主键
	 * @return SerialObject 对象VO
	 */
    public <T extends BaseObject> T findByID_Hibernate_Get(Class class1, Serializable serializable) throws BasException;
    
    /**
	 * Hibernate-FIND查询所有对象
	 * @param Class 对象VO类
	 * @return List 对象VO集合SerialObject
	 */
    public <T extends BaseObject> List<T> findAll_Hibernate_Object(Class class1) throws BasException;
	
	/**
	 * Hibernate-命名HQL删除对象
	 * @param String Hibernate-命名HQL定义
	 * @param Object[] 参数数组
	 * @return int 删除数量个数
	 */
	public int delete_Hibernate_NamedQuery(String s, Object param[]) throws BasException;	
	
	/**
	 * Hibernate-命名HQL更新对象
	 * @param String Hibernate-命名HQL定义
	 * @param Object[] 参数数组
	 * @return int 删除数量个数
	 */
	public int update_Hibernate_NamedQuery(String s, Object param[]) throws BasException;

    /**
	 * Hibernate-命名HQL主键查询对象
	 * @param String Hibernate-命名HQL定义
	 * @param Serializable 序列化主键
	 * @return SerialObject 对象VO
	 */
    public <T extends BaseObject> T findByID_Hibernate_NamedQuery(String s, Serializable serializable) throws BasException;
    
    /**
	 * Hibernate-命名HQL主键查询所有对象
	 * @param String Hibernate-命名HQL定义
	 * @param Object[] 参数值集合
	 * @param int offset偏移起始
	 * @param int size记录数
	 * @param boolean 是否返回总记录数
	 * @return Object[] 记录list&记录数size
	 */
    public Object[] find_Hibernate_NamedQuery(String s, Object param[], int offset, int size, boolean isTotalSize) throws BasException;
    
    /**
	 * Hibernate-命名HQL查询所有对象
	 * @param String Hibernate-命名HQL定义
	 * @return List 对象VO集合SerialObject
	 */
    public <T extends BaseObject> List<T> findAll_Hibernate_NamedQuery(String s) throws BasException;

	/**
	 * iBatis-保存对象
	 * @param String iBatis-SQL定义
	 * @param Object[] 参数数组
	 * @return int 保存数量个数
	 */
	public int save_iBatis(String s, Object param[]) throws BasException;
	
	/**
	 * iBatis-删除对象
	 * @param String iBatis-SQL定义
	 * @param Object[] 参数数组
	 * @return int 删除数量个数
	 */
	public int delete_iBatis(String s, Object param[]) throws BasException;
	
	/**
	 * iBatis-更新对象
	 * @param String iBatis-SQL定义
	 * @param Object[] 参数数组
	 * @return int 更新数量个数
	 */
	public int update_iBatis(String s, Object param[]) throws BasException;
	
	
	/**
	 * iBatis-查询所有对象
	 * @param String iBatis-SQL定义
	 * @return List 对象VO集合
	 */
	public <T> List<T> find_iBatis(String s) throws BasException;
	
	/**
	 * iBatis-查询指定范围所有对象
	 * @param String iBatis-SQL定义
	 * @param Object param参数
	 * @param int offset偏移起始
	 * @param int size记录数
	 * @return List 对象集合
	 */
	public <T> List<T> find_iBatis(String s, Object param, int offset, int size) throws BasException;
	
	/**
	 * iBatis-查询所有对象
	 * @param String iBatis-SQL定义
	 * @param Object 参数
	 * @return List 对象集合
	 */
	public <T> List<T> find_iBatis(String s, Object obj) throws BasException;
	
	/**
	 * JDBC-保存对象
	 * @param String JDBC-SQL语句
	 * @param Object[] 参数数组
	 * @return int 保存数量个数
	 */
	public int save_JDBC(String s, Object aobj[]) throws BasException;
	
	/**
	 * JDBC-删除对象
	 * @param String JDBC-SQL语句
	 * @param Object[] 参数数组
	 * @return int 删除数量个数
	 */
	public int delete_JDBC(String s, Object aobj[]) throws BasException;
	
	/**
	 * JDBC-删除对象
	 * @param String JDBC-SQL语句
	 * @param Object[] 参数数组
	 * @return int 删除数量个数
	 */
	public int update_JDBC(String s, Object aobj[]) throws BasException;
	
	/**
	 * JDBC-查询所有对象
	 * @param String JDBC-SQL语句
	 * @return List 对象集合
	 */
	public List findAll_JDBC(String s) throws BasException;
	
	/**
	 * JDBC-执行存储过程
	 * @param String 过程名称
	 * @param Map 系统参数
	 * @return Map 过程结果
	 */
	public Map runProcedure_JDBC(String procedureName, Map param) throws BasException;
	
}
